home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 85 / CD Temático 40 Febrero 2004.iso / DOS / testdisk / src / ext2fs / brel.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-04-03  |  2.0 KB  |  87 lines

  1. /*
  2.  * brel.h
  3.  * 
  4.  * Copyright (C) 1996, 1997 Theodore Ts'o.
  5.  *
  6.  * %Begin-Header%
  7.  * This file may be redistributed under the terms of the GNU Public
  8.  * License.
  9.  * %End-Header%
  10.  */
  11.  
  12. struct ext2_block_relocate_entry {
  13.     blk_t    new;
  14.     __s16    offset;
  15.     __u16    flags;
  16.     union {
  17.         blk_t        block_ref;
  18.         ext2_ino_t    inode_ref;
  19.     } owner;
  20. };
  21.  
  22. #define RELOCATE_TYPE_REF  0x0007
  23. #define RELOCATE_BLOCK_REF 0x0001
  24. #define RELOCATE_INODE_REF 0x0002
  25.  
  26. typedef struct ext2_block_relocation_table *ext2_brel;
  27.  
  28. struct ext2_block_relocation_table {
  29.     __u32    magic;
  30.     char    *name;
  31.     blk_t    current;
  32.     void    *priv_data;
  33.  
  34.     /*
  35.      * Add a block relocation entry.
  36.      */
  37.     errcode_t (*put)(ext2_brel brel, blk_t old,
  38.                   struct ext2_block_relocate_entry *ent);
  39.  
  40.     /*
  41.      * Get a block relocation entry.
  42.      */
  43.     errcode_t (*get)(ext2_brel brel, blk_t old,
  44.                   struct ext2_block_relocate_entry *ent);
  45.  
  46.     /*
  47.      * Initialize for iterating over the block relocation entries.
  48.      */
  49.     errcode_t (*start_iter)(ext2_brel brel);
  50.     
  51.     /*
  52.      * The iterator function for the inode relocation entries.
  53.      * Returns an inode number of 0 when out of entries.
  54.      */
  55.     errcode_t (*next)(ext2_brel brel, blk_t *old,
  56.               struct ext2_block_relocate_entry *ent);
  57.  
  58.     /*
  59.      * Move the inode relocation table from one block number to
  60.      * another.
  61.      */
  62.     errcode_t (*move)(ext2_brel brel, blk_t old, blk_t new);
  63.  
  64.     /*
  65.      * Remove a block relocation entry.
  66.      */
  67.     errcode_t (*delete)(ext2_brel brel, blk_t old);
  68.  
  69.  
  70.     /*
  71.      * Free the block relocation table.
  72.      */
  73.     errcode_t (*free)(ext2_brel brel);
  74. };
  75.  
  76. errcode_t ext2fs_brel_memarray_create(char *name, blk_t max_block,
  77.                     ext2_brel *brel);
  78.  
  79. #define ext2fs_brel_put(brel, old, ent) ((brel)->put((brel), old, ent))
  80. #define ext2fs_brel_get(brel, old, ent) ((brel)->get((brel), old, ent))
  81. #define ext2fs_brel_start_iter(brel) ((brel)->start_iter((brel)))
  82. #define ext2fs_brel_next(brel, old, ent) ((brel)->next((brel), old, ent))
  83. #define ext2fs_brel_move(brel, old, new) ((brel)->move((brel), old, new))
  84. #define ext2fs_brel_delete(brel, old) ((brel)->delete((brel), old))
  85. #define ext2fs_brel_free(brel) ((brel)->free((brel)))
  86.  
  87.